﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Tworzenie_Grafiku
{
    /// <summary>
    /// Interaction logic for DokumentSprzedaz.xaml
    /// </summary>
    public partial class DokumentSprzedaz : Window
    {
        List<String> rodzaje_dokumentow = new List<String>();
        List<PolaUslugi> uslugi = new List<PolaUslugi>();
        List<String> klienci = new List<String>();
        String id_uzytkownika, imie_uzytkownika, nazwisko_uzytkownika, stanowisko_uzytkownika;

        public DokumentSprzedaz(string id, string imie, string nazwisko, string stanowisko)
        {
            InitializeComponent();
            id_uzytkownika = id;
            imie_uzytkownika = imie;
            nazwisko_uzytkownika = nazwisko;
            stanowisko_uzytkownika = stanowisko;
            rodzaje_dokumentow.Add("Sprzedaż");
            rodzaje_dokumentow.Add("Koszty");
            rodzaje_dokumentow.Add("Pozostałe");
            Typ.ItemsSource = rodzaje_dokumentow;
            Typ.SelectedItem = "Sprzedaż";
            for (int i = 0; i < 8; i++)
            {
                uslugi.Add(new PolaUslugi(new TextBox(), new TextBox(), new TextBox(), new TextBox(), new TextBox()));
                uslugi[i].getLp().Text = Convert.ToString(i + 1)+".";
                uslugi[i].getLp().IsReadOnly = true;
                uslugi[i].getLp().Width = 44;
                uslugi[i].getOpis().Width = 198;
                uslugi[i].getIlosc().Width = 50;
                uslugi[i].getCena().Width = 98;
                uslugi[i].getWartcalk().Width = 141;
                uslugi[i].getWartcalk().IsReadOnly = true;
                uslugi[i].getIlosc().TextChanged += new TextChangedEventHandler(wart_TextChanged);
                uslugi[i].getCena().TextChanged += new TextChangedEventHandler(wart_TextChanged);
                panel.Children.Add(uslugi[i].getLp());
                panel.Children.Add(uslugi[i].getOpis());
                panel.Children.Add(uslugi[i].getIlosc());
                panel.Children.Add(uslugi[i].getCena());
                panel.Children.Add(uslugi[i].getWartcalk());
            }
            pobierz_Klientow();
        }

        private void pobierz_Klientow()
        {
            List<Pacjent> pacjenci;
            using (LINQtoDBDataContext db = new LINQtoDBDataContext())
            {
                var records = from record in db.Pacjents
                              select record;
                pacjenci = records.ToList();
            }
            if (pacjenci.Count > 0)
            {
                foreach (Pacjent p in pacjenci)
                {
                    klienci.Add(p.Imie+" "+p.Nazwisko+" "+p.Pesel);
                }
            }
            Klient.ItemsSource = klienci;
        }

        private void Typ_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (Typ.SelectedItem.ToString().Equals("Koszty", StringComparison.Ordinal))
            {
                new DokumentKoszt(id_uzytkownika, imie_uzytkownika, nazwisko_uzytkownika, stanowisko_uzytkownika).Show();
                this.Close();
            }
            else if (Typ.SelectedItem.ToString().Equals("Pozostałe", StringComparison.Ordinal))
            {
                new DokumentInne(id_uzytkownika, imie_uzytkownika, nazwisko_uzytkownika, stanowisko_uzytkownika).Show();
                this.Close();
            }
        }

        private void zapisz_Click(object sender, RoutedEventArgs e)
        {
            LINQtoDBDataContext db = new LINQtoDBDataContext();
            string[] klient = Convert.ToString(Klient.SelectedItem).Split(new Char[] { ' ' });
            DokumentSprzedazy row = new DokumentSprzedazy()
            {
                Numer_faktury = nrfaktury.Text,
                Pesel_klienta = klient[2],
                Data = data_fakt.Text,
                Id_pracownika = Convert.ToInt32(id_uzytkownika)
            };
            db.DokumentSprzedazies.InsertOnSubmit(row);
            foreach (PolaUslugi u in uslugi)
            {
                if (u.getCena().Text != "" && nrfaktury.Text.Length<=12)
                {
                    Usługa urow = new Usługa()
                    {
                       
                        Nazwa = u.getOpis().Text,
                        Cena_netto = u.getCena().Text,
                        Ilosc = Convert.ToInt32(u.getIlosc().Text),
                        Id_dokumentu = nrfaktury.Text
                    };
                    db.Usługas.InsertOnSubmit(urow);
                }
            }
            db.SubmitChanges();
            nrfaktury.Text = "";
            data_fakt.Text = "";
            Klient.SelectedIndex = -1;
            suma_calk.Text = "";
            foreach (PolaUslugi u in uslugi)
            {
                u.getOpis().Text = "";
                u.getIlosc().Text = "";
                u.getCena().Text = "";
                u.getWartcalk().Text = "";
            }
        }

        private void anuluj_Click(object sender, RoutedEventArgs e)
        {
            new Dokumenty(id_uzytkownika, imie_uzytkownika, nazwisko_uzytkownika, stanowisko_uzytkownika).Show();
            this.Close();
        }

        private void wart_TextChanged(object sender, TextChangedEventArgs e)
        {
            foreach (PolaUslugi u in uslugi)
            {
                if (u.getCena().GetType() == sender.GetType())
                    u.obliczWart();
            }
            double suma = 0;
            foreach (PolaUslugi u in uslugi)
            {
                if (u.getWartcalk().Text != "")
                    suma += Convert.ToDouble(u.getWartcalk().Text);
            }
            suma_calk.Text = Convert.ToString(suma);
        }
    }
}
